//日期排序
import * as dayjs from 'dayjs';

// 日期排序
export function sortDate(a = {}, b = {}, property: string, format = 'yyyy-mm-dd HH:mm:ss') {
  let aDate = dayjs(a[property], format).valueOf();
  let bDate = dayjs(b[property], format).valueOf();
  return aDate - bDate
}

//中文排序
export function sortString(a = {}, b = {}, property: string, p2: string = '') {
  if (p2) {
    return a[property][p2].localeCompare(b[property][p2], 'zh-CN')
  }
  return a[property].localeCompare(b[property], 'zh-CN')
}

//截取字符串
export const getSubStr = (str: string = '', headStart: number, headEnd: number, tailStart: number, tailEnd: number = str.length) => {
  return (str.substring(headStart, headEnd) + '...' + str.substring(str.length - tailStart, tailEnd));
};

export function sortByProps(item1: any, item2: any, obj: any) {
  var props = [];
  if (obj) {
    props.push(obj)
  }
  var cps = [];
  // 存储排序属性比较结果。
  // 如果未指定排序属性(即obj不存在)，则按照全属性升序排序。
  // 记录下两个排序项按照各个排序属性进行比较得到的结果
  var asc = true;
  if (props.length < 1) {
    for (var p in item1) {
      if (item1[p] > item2[p]) {
        cps.push(1);
        break;
        // 大于时跳出循环。
      } else if (item1[p] === item2[p]) {
        cps.push(0);
      } else {
        cps.push(-1);
        break;
        // 小于时跳出循环。
      }
    }
  } else {
    for (var i = 0; i < props.length; i++) {
      var prop = props[i];
      for (var o in prop) {
        asc = prop[o] === "ascending";
        let rs = sortString(item1, item2, o)
        if (rs === 1) {
          cps.push(asc ? 1 : -1);
          break;
          // 大于时跳出循环。
        } else if (rs === 0) {
          cps.push(0);
        } else {
          cps.push(asc ? -1 : 1);
          break;
          // 小于时跳出循环。
        }
      }
    }
  }
  // 根据各排序属性比较结果综合判断得出两个比较项的最终大小关系
  for (var j = 0; j < cps.length; j++) {
    if (cps[j] === 1 || cps[j] === -1) {
      return cps[j];
    }
  }
  return 1;
}

//防抖函数
export const debounce = (fn: Function, wait: number) => {
  let timeout: any;
  return function (input: any) {
    input.persist();
    if (timeout !== null) clearTimeout(timeout);
    timeout = setTimeout(fn, wait, input);
  };
};


//删除对象数组中某个元素
export function removeFromArray(array, key, value) {
  let keys = key.split('.')
  if (keys.length > 1) {
    array.forEach((item, i) => {
      if (item[keys[0]][keys[1]] === value) {
        array.splice(i, 1);
      }
    })
  } else {
    array.forEach((item, i) => {
      if (item[key] === value) {
        array.splice(i, 1);
      }
    })
  }
}

// 对象数组是否包含
export function isInArray(array: any[], obj: any) {
  let flag = false
  let keys = Object.keys(obj);
  array.forEach(item => {
    if (item[keys[0]] === obj[keys[0]]) {
      flag = true
      return flag;
    }
  })
  return flag;
}
